#include <iostream>
#include <unistd.h>
#include <netdb.h>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

struct Fileinfo
{
    char fileName[256];    // 文件名
    int fileSize;          // 文件大小
};


class Tcpclient
{
private:
    /* data */
public:
    Tcpclient(/* args */);

    int clientfd;  // 客户端的socket，-1表示未连接或连接已断开，>=0表示有效的socket
    std::string ip;   // 服务端的ip
    unsigned short port;  // 通讯端口 

    // 向服务端发起连接请求，成功返回true，失败返回false
    bool connect(const std::string &ip, const unsigned short &port);

    // 向服务端发送报文，成功返回true，失败返回false
    bool send(const std::string &buffer);   // buffer不要使用const char *, const char *只支持c风格字符串，不支持string

    // 向服务端发送报文(二进制数据)，成功返回true，失败返回false
    bool send(void * buffer, const size_t size);   // void *支持任意数据类型

    // 接收服务端的报文，成功返回true，失败返回false
    // buffer存放接收到的报文，maxLen本次接受报文的最大长度
    bool recv(std::string &buffer, const size_t maxLen);

    // 断开与服务端的连接
    bool close();

    // 向服务端发送文件内容
    bool sendFile(const std::string & fileName, const size_t fileSize);

    ~Tcpclient();
};



